]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
ci: Use python to extract JS snippets from style guide
authorFlorian Müllner <fmuellner@gnome.org>
Sun, 13 Apr 2025 01:07:16 +0000 (03:07 +0200)
committerMarge Bot <marge-bot@gnome.org>
Sun, 13 Apr 2025 11:53:41 +0000 (11:53 +0000)
The job that lints code snippets in the style guide only runs
when either the documentation or the linting rules are changed.

Because of that it went unnoticed that the awk tool it uses to
extract the snippets is no longer available since the CI image
was rebased to F42.

Given that awk is awkward anyway, use the opportunity to rewrite the
snippet extraction in python instead of adding awk back to the image.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/3694>

.gitlab-ci/eslint-coding-style.sh

index 772d7463e48047671023f23e01cdc3eb9dc64fb9..39f00530e0afa66d20e8852f6812123b89e41bd9 100755 (executable)
@@ -6,36 +6,36 @@ trap "rm -rf $OUTDIR" EXIT
 
 # Turn ```javascript``` code snippets in the
 # style guide into .js files in $OUTDIR
-awk --assign dir=$OUTDIR -- '
-  BEGIN {
-    do_print = 0;
-    cur = 0;
-  }
-
-  # end of code snippet
-  /```$/ {
-    do_print = 0;
-    cur++;
-  }
-
-  do_print {
-    # remove one level of indent
-    sub("    ","")
-
-    # the following are class snippets, turn them
-    # into functions to not confuse eslint
-    sub("moveActor","function moveActor")
-    sub("desaturateActor","function desaturateActor")
-
-    # finally, append to the currently generated .js file
-    print >> dir "/" cur ".js";
-  }
-
-  # start of code snippet
-  /```javascript$/ {
-    do_print = 1;
-  }
-' docs/js-coding-style.md
+cat <<'EOF' | python3 - docs/js-coding-style.md $OUTDIR
+import sys
+import re
+
+def extract_js_snippets(input_file, output_dir):
+    with open(input_file, 'r') as file:
+        content = file.read()
+
+    # Find all JavaScript code blocks using regex
+    js_blocks = re.findall(r'```javascript\n(.*?)\n?```', content, flags=re.DOTALL)
+
+    for i, (match) in enumerate(js_blocks):
+        js_code = match
+
+        # Remove one level of indent
+        js_code = re.sub(r'^ {4}', '', js_code, flags=re.MULTILINE)
+
+        # The following are class snippets, turn them
+        # into functions to not confuse eslint
+        js_code = re.sub(r'^moveActor', 'function moveActor', js_code)
+        js_code = re.sub(r'^desaturateActor', 'function desaturateActor', js_code)
+
+        # Finally, create a .js file in the output directory
+        output_filename = f'{output_dir}/{i}.js'
+        with open(output_filename, 'w') as out_file:
+            out_file.write(f'{js_code}\n')
+
+input_file, output_dir = sys.argv[1:]
+extract_js_snippets(input_file, output_dir)
+EOF
 
 eslint \
   --rule 'no-undef: off' \